// Include system file
#include "r_cg_can.h"

// Include project file
#include "CAN.h"
#include "fet.h"
#include "nvm.h"
#include "control.h"
#include "faults.h"
#include "Main.h"
#include "Switches.h"
#include "Joystick.h"
#include "Serial.h"
#include "Battery.h"
#include "BMS_CAN.h"

#include "RangeExtender.h"
#include "RemoteCtrlCan.h"
#include "MotoCan.h"
#include "TransportCtrlLogic.h"

/*
	左前 		右前
	206/7 	204/5
	左后 		右后
	208/9 	202/3
*/
structWalkMotoCan stWalkMotoCan[WalkMotoLen] = {0};
structStreerMotoCan stStreerMotoCan[StreerMotoLen]={0};
structPumpMotoCan stPumpMotoCan = {0};

#define MotoLostCnt	(2000/10)//2s掉线
#define WalkMotoMax (3000/100)




static void vProcWalkMotoLost(void);//10ms
static void vProcStreerMotoLost(void);//10ms
static void vProcPumpMotoLost(void);

void vWalkMotoRx(void)//10ms
{
	vProcWalkMotoLost();
	if(stWalkMotoCan[WalkMoto2].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[WalkMoto2].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto4].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[WalkMoto4].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto6].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[WalkMoto6].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto8].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[WalkMoto8].stRxCtrl.fRx18xUpdate=0;
	}
	//
	if(stWalkMotoCan[WalkMoto2].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[WalkMoto2].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto4].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[WalkMoto4].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto6].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[WalkMoto6].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[WalkMoto8].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[WalkMoto8].stRxCtrl.fRx28xUpdate=0;
	}
}
/*
	UINT16 u16SpeedRef;
	
	UINT8 fPowerEn:1;//bit0:电源使能
	UINT8 fRelayEn:1;//bit1:接触器使能
	UINT8 fBrakeEn:1;//bit2:刹车使能
	UINT8 fForward:1;//bit3:前进
	UINT8 fBackward:1;//bit4:后退
	UINT8 u8Byte2NC:3;

	UINT8 u8Byte3NC1:4;
	UINT8 fReleaseBrake:1;
	UINT8 u8Byte3NC2:3;

	UINT8 BytesNC[4];
*/
	/*
		左前		右前
		206/7	204/5
		左后		右后
		208/9	202/3
	*/
void vWalkMotoTx(void)
{
	static UINT8 u8_50msCnt=0;
	UINT8 i=0;
	UINT8 u8_buffer[8]; 
	UINT16 u16Temp;
	if(++u8_50msCnt>=5){u8_50msCnt=0;}
	switch(u8_50msCnt)
	{
		case 0:
			if(TX_FIFO_PUSH_EN)
			{
				u16Temp = MyAbs(stSpeedCtrl.s16RearRightSpeed);
				if(stSpeedCtrl.s16RearRightSpeed!=0)
				{
					if(stSpeedCtrl.s16RearRightSpeed>=0)
					{
						stWalkMotoCan[WalkMoto2].unTx20x.bit.fForward=1;
					}
					else
					{
						stWalkMotoCan[WalkMoto2].unTx20x.bit.fBackward=1;
					}
					stWalkMotoCan[WalkMoto2].unTx20x.bit.fBrakeEn=1;
					stWalkMotoCan[WalkMoto2].unTx20x.bit.u16SpeedRef = u16Temp;
				}
				else
				{
					stWalkMotoCan[WalkMoto2].unTx20x.bit.fBrakeEn=0;
					stWalkMotoCan[WalkMoto2].unTx20x.bit.fForward=0;
					stWalkMotoCan[WalkMoto2].unTx20x.bit.fBackward=0;
					stWalkMotoCan[WalkMoto2].unTx20x.bit.u16SpeedRef = 0;
				}
				
				stWalkMotoCan[WalkMoto2].unTx20x.bit.fPowerEn=1;
				stWalkMotoCan[WalkMoto2].unTx20x.bit.fRelayEn=1;
				
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stWalkMotoCan[WalkMoto2].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0202, 8, u8_buffer);
			}
		break;
		case 1:
			if(TX_FIFO_PUSH_EN)
			{
				u16Temp = MyAbs(stSpeedCtrl.s16FrontRightSpeed);
				if(stSpeedCtrl.s16FrontRightSpeed!=0)
				{
					if(stSpeedCtrl.s16FrontRightSpeed>=0)
					{
						stWalkMotoCan[WalkMoto4].unTx20x.bit.fForward=1;
					}
					else
					{
						stWalkMotoCan[WalkMoto4].unTx20x.bit.fBackward=1;
					}
					stWalkMotoCan[WalkMoto4].unTx20x.bit.fBrakeEn=1;
					stWalkMotoCan[WalkMoto4].unTx20x.bit.u16SpeedRef = u16Temp;
				}
				else
				{
					stWalkMotoCan[WalkMoto4].unTx20x.bit.fBrakeEn=0;
					stWalkMotoCan[WalkMoto4].unTx20x.bit.fForward=0;
					stWalkMotoCan[WalkMoto4].unTx20x.bit.fBackward=0;
					stWalkMotoCan[WalkMoto4].unTx20x.bit.u16SpeedRef = 0;
				}
				
				stWalkMotoCan[WalkMoto4].unTx20x.bit.fPowerEn=1;
				stWalkMotoCan[WalkMoto4].unTx20x.bit.fRelayEn=1;
				
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stWalkMotoCan[WalkMoto4].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0204, 8, u8_buffer);
			}
		break;
		case 2:
			if(TX_FIFO_PUSH_EN)
			{
				u16Temp = MyAbs(stSpeedCtrl.s16FrontLeftSpeed);
				if(stSpeedCtrl.s16FrontLeftSpeed!=0)
				{
					if(stSpeedCtrl.s16FrontLeftSpeed>=0)
					{
						stWalkMotoCan[WalkMoto6].unTx20x.bit.fForward=1;
					}
					else
					{
						stWalkMotoCan[WalkMoto6].unTx20x.bit.fBackward=1;
					}
					stWalkMotoCan[WalkMoto6].unTx20x.bit.fBrakeEn=1;
					stWalkMotoCan[WalkMoto6].unTx20x.bit.u16SpeedRef = u16Temp;
				}
				else
				{
					stWalkMotoCan[WalkMoto6].unTx20x.bit.fBrakeEn=0;
					stWalkMotoCan[WalkMoto6].unTx20x.bit.fForward=0;
					stWalkMotoCan[WalkMoto6].unTx20x.bit.fBackward=0;
					stWalkMotoCan[WalkMoto6].unTx20x.bit.u16SpeedRef = 0;
				}
				
				stWalkMotoCan[WalkMoto6].unTx20x.bit.fPowerEn=1;
				stWalkMotoCan[WalkMoto6].unTx20x.bit.fRelayEn=1;
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stWalkMotoCan[WalkMoto6].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0206, 8, u8_buffer);
			}
		break;
		case 3:
			if(TX_FIFO_PUSH_EN)
			{
				u16Temp = MyAbs(stSpeedCtrl.s16RearLeftSpeed);
				if(stSpeedCtrl.s16RearLeftSpeed!=0)
				{
					if(stSpeedCtrl.s16RearLeftSpeed>=0)
					{
						stWalkMotoCan[WalkMoto8].unTx20x.bit.fForward=1;
					}
					else
					{
						stWalkMotoCan[WalkMoto8].unTx20x.bit.fBackward=1;
					}
					stWalkMotoCan[WalkMoto8].unTx20x.bit.fBrakeEn=1;
					stWalkMotoCan[WalkMoto8].unTx20x.bit.u16SpeedRef = u16Temp;
				}
				else
				{
					stWalkMotoCan[WalkMoto8].unTx20x.bit.fBrakeEn=0;
					stWalkMotoCan[WalkMoto8].unTx20x.bit.fForward=0;
					stWalkMotoCan[WalkMoto8].unTx20x.bit.fBackward=0;
					stWalkMotoCan[WalkMoto8].unTx20x.bit.u16SpeedRef = 0;
				}
				
				stWalkMotoCan[WalkMoto8].unTx20x.bit.fPowerEn=1;
				stWalkMotoCan[WalkMoto8].unTx20x.bit.fRelayEn=1;
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stWalkMotoCan[WalkMoto8].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0208, 8, u8_buffer);
			}
		break;
		default:
		break;
	}
}
void vStreerMotoRx(void)
{
	vProcStreerMotoLost();
	if(stWalkMotoCan[StreerMoto3].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[StreerMoto3].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto5].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[StreerMoto5].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto7].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[StreerMoto7].stRxCtrl.fRx18xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto9].stRxCtrl.fRx18xUpdate)
	{
		stWalkMotoCan[StreerMoto9].stRxCtrl.fRx18xUpdate=0;
	}
	//
	if(stWalkMotoCan[StreerMoto3].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[StreerMoto3].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto5].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[StreerMoto5].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto7].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[StreerMoto7].stRxCtrl.fRx28xUpdate=0;
	}
	if(stWalkMotoCan[StreerMoto9].stRxCtrl.fRx28xUpdate)
	{
		stWalkMotoCan[StreerMoto9].stRxCtrl.fRx28xUpdate=0;
	}
}
void vStreerMotoTx(void)
{
	static UINT8 u8_20msCnt=0;
	UINT8 i,u8_buffer[8];
	/*
		左前 		右前
		206/7 	204/5
		左后 		右后
		208/9 	202/3
	*/
	if(++u8_20msCnt>=2){u8_20msCnt=0;}
	switch(u8_20msCnt)
	{
		case 0:
			stStreerMotoCan[StreerMoto7].unTx20x.bit.s16AngleRef = stMovementCtrl.s16AngleFrontLeft;
			stStreerMotoCan[StreerMoto5].unTx20x.bit.s16AngleRef = stMovementCtrl.s16AngleFrontRight;
			stStreerMotoCan[StreerMoto9].unTx20x.bit.s16AngleRef = stMovementCtrl.s16AngleRearLeft;
			stStreerMotoCan[StreerMoto3].unTx20x.bit.s16AngleRef = stMovementCtrl.s16AngleRearRight;

			stStreerMotoCan[StreerMoto7].unTx20x.Bytes[2]=7;
			stStreerMotoCan[StreerMoto5].unTx20x.Bytes[2]=7;
			stStreerMotoCan[StreerMoto9].unTx20x.Bytes[2]=7;
			stStreerMotoCan[StreerMoto3].unTx20x.Bytes[2]=7;
			if(TX_FIFO_PUSH_EN)
			{
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stStreerMotoCan[StreerMoto5].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0205, 8, u8_buffer);
			}
			if(TX_FIFO_PUSH_EN)
			{
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stStreerMotoCan[StreerMoto7].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0207, 8, u8_buffer);
			}
			if(TX_FIFO_PUSH_EN)
			{
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stStreerMotoCan[StreerMoto3].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0203, 8, u8_buffer);
			}
			if(TX_FIFO_PUSH_EN)
			{
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stStreerMotoCan[StreerMoto9].unTx20x.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x0209, 8, u8_buffer);
			}
			
		break;
		case 1:
			
		break;
		default:
		break;
	}
}
void vPumpMotoRx(void)
{
	vProcPumpMotoLost();
	if(stPumpMotoCan.stRxCtrl.fRx28AUpdate)
	{
		stPumpMotoCan.stRxCtrl.fRx28AUpdate=0;
	}
}
void vPumpMotoTx(void)
{
	static UINT8 u8_50msCnt=0;
	UINT8 i,u8_buffer[8];
	if(++u8_50msCnt>=5){u8_50msCnt=0;}
	switch(u8_50msCnt)
	{
		case 0:
			if(TX_FIFO_PUSH_EN)
			{
				stPumpMotoCan.unTx20A.Bytes[2]=3;
				for(i=0;i<8;i++)
				{
					u8_buffer[i] = stPumpMotoCan.unTx20A.Bytes[i];
				}
				vPushCanTxFifo(&stCanTxFifo,0x0000, 0x020A, 8, u8_buffer);
			}
		break;
		default:
		break;
	}
}
//////////////////////////////////////////////////////
static void vProcPumpMotoLost(void)
{
	if(stPumpMotoCan.stRxCtrl.u16Rx28ALostCnt<MotoLostCnt)
	{
		stPumpMotoCan.stRxCtrl.u16Rx28ALostCnt++;
	}
	else
	{
		stPumpMotoCan.stRxCtrl.fRx28ALost=1;
	}
	if(stPumpMotoCan.stRxCtrl.fRx28AUpdate)
	{
		stPumpMotoCan.stRxCtrl.u16Rx28ALostCnt=0;
		stPumpMotoCan.stRxCtrl.fRx28ALost=0;
	}
}
static void vProcWalkMotoLost(void)//10ms
{
	UINT8 i=0;
	for(i=0;i<WalkMotoLen;i++)
	{
		if(stWalkMotoCan[i].stRxCtrl.u16Rx18xLostCnt<MotoLostCnt)
		{
			stWalkMotoCan[i].stRxCtrl.u16Rx18xLostCnt++;
		}
		else
		{
			stWalkMotoCan[i].stRxCtrl.fRx18xLost=1;
		}
		if(stWalkMotoCan[i].stRxCtrl.fRx18xUpdate)
		{
			stWalkMotoCan[i].stRxCtrl.u16Rx18xLostCnt=0;
			stWalkMotoCan[i].stRxCtrl.fRx18xLost=0;
		}
		if(stWalkMotoCan[i].stRxCtrl.u16Rx28xLostCnt<MotoLostCnt)
		{
			stWalkMotoCan[i].stRxCtrl.u16Rx28xLostCnt++;
		}
		else
		{
			stWalkMotoCan[i].stRxCtrl.fRx28xLost=1;
		}
		if(stWalkMotoCan[i].stRxCtrl.fRx28xUpdate)
		{
			stWalkMotoCan[i].stRxCtrl.u16Rx28xLostCnt=0;
			stWalkMotoCan[i].stRxCtrl.fRx28xLost=0;
		}
	}
}
static void vProcStreerMotoLost(void)//10ms
{
	UINT8 i=0;
	for(i=0;i<StreerMotoLen;i++)
	{
		if(stStreerMotoCan[i].stRxCtrl.u16Rx18xLostCnt<MotoLostCnt)
		{
			stStreerMotoCan[i].stRxCtrl.u16Rx18xLostCnt++;
		}
		else
		{
			stStreerMotoCan[i].stRxCtrl.fRx18xLost=1;
		}
		if(stStreerMotoCan[i].stRxCtrl.fRx18xUpdate)
		{
			stStreerMotoCan[i].stRxCtrl.u16Rx18xLostCnt=0;
			stStreerMotoCan[i].stRxCtrl.fRx18xLost=0;
		}
		if(stStreerMotoCan[i].stRxCtrl.u16Rx28xLostCnt<MotoLostCnt)
		{
			stStreerMotoCan[i].stRxCtrl.u16Rx28xLostCnt++;
		}
		else
		{
			stStreerMotoCan[i].stRxCtrl.fRx28xLost=1;
		}
		if(stStreerMotoCan[i].stRxCtrl.fRx28xUpdate)
		{
			stStreerMotoCan[i].stRxCtrl.u16Rx28xLostCnt=0;
			stStreerMotoCan[i].stRxCtrl.fRx28xLost=0;
		}
	}
}
/*
这里18x和28x区分了2种
2,4,6,8
3,5,7,9区分了2种
所以2*2共4种，4个接收缓冲
*/
void vWalkMoto18xRxCallback(UINT16 u16_id_hi,UINT16 u16_id_lo,UINT8 u8_length,UINT8 *pData)//200us中断回调
{
	UINT8 i;
	if(u16_id_hi!=0||u8_length!=8)
	{
		return;
	}
	if(u16_id_lo==0x182)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto2].unRx18x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto2].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo==0x184)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto4].unRx18x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto4].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo==0x186)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto6].unRx18x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto6].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo==0x188)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto8].unRx18x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto8].stRxCtrl.fRx18xUpdate=1;
	}
}
void vWalkMoto28xRxCallback(UINT16 u16_id_hi,UINT16 u16_id_lo,UINT8 u8_length,UINT8 *pData)//200us中断回调
{
	UINT8 i;
	if(u16_id_hi!=0||u8_length!=8)
	{
		return;
	}
	if(u16_id_lo==0x282)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto2].unRx28x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto2].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo==0x284)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto4].unRx28x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto4].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo==0x286)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto6].unRx28x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto6].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo==0x288)
	{
		for(i=0;i<8;i++)
		{
			stWalkMotoCan[WalkMoto8].unRx28x.Bytes[i]=pData[i];
		}
		stWalkMotoCan[WalkMoto8].stRxCtrl.fRx28xUpdate=1;
	}
}
void vStreerMoto18xRxCallback(UINT16 u16_id_hi,UINT16 u16_id_lo,UINT8 u8_length,UINT8 *pData)//200us中断回调
{
	UINT8 i;
	if(u16_id_hi!=0||u8_length!=8)
	{
		return;
	}
	if(u16_id_lo == 0x183)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto3].unRx18x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto3].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo == 0x185)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto5].unRx18x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto5].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo == 0x187)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto7].unRx18x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto7].stRxCtrl.fRx18xUpdate=1;
	}
	else if(u16_id_lo == 0x189)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto9].unRx18x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto9].stRxCtrl.fRx18xUpdate=1;
	}
}
void vStreerMoto28xRxCallback(UINT16 u16_id_hi,UINT16 u16_id_lo,UINT8 u8_length,UINT8 *pData)//200us中断回调
{
	UINT8 i;
	if(u16_id_hi!=0||u8_length!=8)
	{
		return;
	}
	if(u16_id_lo == 0x283)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto3].unRx28x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto3].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo == 0x285)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto5].unRx28x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto5].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo == 0x287)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto7].unRx28x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto7].stRxCtrl.fRx28xUpdate=1;
	}
	else if(u16_id_lo == 0x289)
	{
		for(i=0;i<8;i++)
		{
			stStreerMotoCan[StreerMoto9].unRx28x.Bytes[i]=pData[i];
		}
		stStreerMotoCan[StreerMoto9].stRxCtrl.fRx28xUpdate=1;
	}
}
void vPumpMoto28A_RxCallback(UINT16 u16_id_hi,UINT16 u16_id_lo,UINT8 u8_length,UINT8 *pData)//200us中断回调
{
	UINT8 i;
	if(u16_id_hi!=0||u8_length!=8)
	{
		return;
	}
	if(u16_id_lo == 0x28A)
	{
		for(i=0;i<8;i++)
		{
			stPumpMotoCan.unRx28A.Bytes[i]=pData[i];
		}
		stPumpMotoCan.stRxCtrl.fRx28AUpdate=1;
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////


